package com.sugon.aop;

import cn.hutool.core.util.ArrayUtil;
import com.sugon.utils.MapUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 对所有业务列表查询参数进行过滤操作
 * 主要进行移除空参数操作
 * 最新改造
 *
 * @author YuXD
 * @date 2020-08-03 11:47
 */
@Aspect
@Component
public class QueryArgsFilterAspect {

    /**
     * 只用作定义查询参数过滤切点，注解注明核心内容
     * 方法体内无需任何实现
     */
    @Pointcut("execution(* com.sugon.controller.*.*Controller.*list*(..))")
    public void queryArgsFilterPointcut() {
    }

    /**
     * 查询参数过滤before切面
     *
     * @param point
     * @throws Throwable
     */
    @Before("queryArgsFilterPointcut()")
    public void dataFilter(JoinPoint point) throws Throwable {
        // 参数不能为空
        Object[] args = point.getArgs();
        if (ArrayUtil.isEmpty(args)) {
            return;
        }
        Object objArgs = args[0];
        if (objArgs instanceof Map) {
            Map queryParam = (Map) objArgs;
            MapUtil.removeEmptyValue(queryParam);
        }
    }

}
